package com.lzh.financial.util;

import cn.hutool.crypto.digest.BCrypt;
import cn.hutool.crypto.digest.MD5;
import com.lzh.financial.config.SecurityConfig;
import org.springframework.data.redis.util.ByteUtils;

import java.util.UUID;

public class MyPwdUtil {


    /**
     * 自定义-暂时废弃
     * 通过uuid生成随机数，再取其中9个作为盐值
     * @return
     */
    public static String createPwdSalt(){
        String salt = UUID.randomUUID().toString().toUpperCase().replace("-","");
        String newSalt = salt.substring(2, 10).toLowerCase();
        System.out.println(newSalt.length());
        return newSalt;
    }

    /**
     * 自定义-暂时废弃
     * 通过md5算法，生成密文
     * 通过存的盐和password来与传过来的password加存的盐比较，如果一致就说明密码正确
     * @param password
     * @return
     */
    public static String getMD5Password(String password,String salt){
        byte[] bytes = ByteUtils.getBytes(ByteUtils.getByteBuffer(salt));
        MD5 md5 = new MD5(bytes, 2, 0);
        return  md5.digestHex(password);
    }

    /**
     * 通过bcrypt强散列方法，基于hash算法实现单向加密，生成密文,通过strength控制加密长度，默认10.
     * 通过存的盐和password来与传过来的password加存的盐比较，如果一致就说明密码正确
     * @return
     */
    public static String createBcrySalt(){
        String gensalt = BCrypt.gensalt();
        String newSalt = gensalt.toLowerCase();
        System.out.println(newSalt.length());
        return newSalt;
    }


    /**
     * 对比新旧密码，用于bcrypt强散列方法
     * @param salt 盐值
     * @param newPassword 新密码
     * @param oldPassword 旧密码
     * @return
     */
    public static boolean verifyPasswordB(String newPassword,String oldPassword,String salt){
        String hashpw = BCrypt.hashpw(newPassword, salt);
        if (!oldPassword.equals(hashpw)) {
            return false;
        }else {
            return true;
        }
    }





}
